#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
云顶之弈智能助手 - DeepSeek版本
专门配置用于DeepSeek API
"""

import os
import sys
import asyncio
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))

async def check_deepseek_config():
    """检查DeepSeek配置"""
    print("检查DeepSeek API配置...")

    # 检查配置文件
    config_file = project_root / "config.json"
    if config_file.exists():
        import json
        with open(config_file, 'r', encoding='utf-8') as f:
            config = json.load(f)

        api_key = config.get('openai_api_key')
        api_base = config.get('openai_api_base')
        model = config.get('model')

        if api_key:
            print("DeepSeek API密钥已配置")
            if api_base:
                print(f"API基础URL: {api_base}")
            if model:
                print(f"模型: {model}")
            return True
        else:
            print("config.json中未配置API密钥")
    else:
        print("config.json文件不存在")

    # 检查环境变量
    env_key = os.getenv("OPENAI_API_KEY")
    env_base = os.getenv("OPENAI_API_BASE")

    if env_key:
        print("环境变量中已配置API密钥")
        if env_base:
            print(f"环境变量中已配置API基础URL: {env_base}")
        return True
    else:
        print("环境变量中未配置API密钥")

    return False

async def test_deepseek_connection():
    """测试DeepSeek连接"""
    print("\n测试DeepSeek连接...")

    try:
        from langchain_openai import ChatOpenAI

        # 获取配置
        api_key = None
        base_url = None
        model = "deepseek-chat"

        config_file = project_root / "config.json"
        if config_file.exists():
            import json
            with open(config_file, 'r', encoding='utf-8') as f:
                config = json.load(f)
                api_key = config.get('openai_api_key')
                base_url = config.get('openai_api_base')
                model = config.get('model', model)

        # 环境变量覆盖
        if os.getenv("OPENAI_API_KEY"):
            api_key = os.getenv("OPENAI_API_KEY")
        if os.getenv("OPENAI_API_BASE"):
            base_url = os.getenv("OPENAI_API_BASE")

        if not api_key:
            print("未找到API密钥，无法测试")
            return False

        # 创建客户端
        client_config = {
            "api_key": api_key,
            "model": model,
            "temperature": 0.1
        }

        if base_url:
            client_config["base_url"] = base_url

        client = ChatOpenAI(**client_config)

        print("正在连接DeepSeek API...")

        # 测试调用
        response = client.invoke("你好，请简单介绍一下你自己")

        print("DeepSeek API连接成功！")
        print(f"测试响应: {response.content[:100]}...")
        return True

    except Exception as e:
        print(f"DeepSeek API连接失败: {e}")
        return False

async def start_deepseek_assistant():
    """启动DeepSeek助手"""
    print("云顶之弈智能助手 - DeepSeek版本")
    print("=" * 50)

    # 检查配置
    if not await check_deepseek_config():
        print("\n请先配置DeepSeek API:")
        print("运行: python setup_deepseek_api.py")
        input("\n按回车键退出...")
        return

    # 测试连接
    print("\n是否要测试API连接？(y/n): ", end="")
    test_choice = input().strip().lower()
    if test_choice in ['y', 'yes', '是']:
        if not await test_deepseek_connection():
            print("\n连接测试失败，请检查配置")
            input("\n按回车键退出...")
            return

    try:
        print("\n正在启动DeepSeek智能助手...")

        from agent_assistant import AgentTFTAssistant
        assistant = AgentTFTAssistant()

        # 初始化
        await assistant.initialize()

        if assistant.is_initialized:
            print("DeepSeek智能助手启动成功！")
            print()
            print("功能特点：")
            print("- 使用DeepSeek大模型")
            print("- 智能搜索和分析")
            print("- 自主工具选择")
            print("- 多轮对话支持")
            print()
            print("使用说明：")
            print("- 直接输入您的问题")
            print("- 输入 '帮助' 查看详细指南")
            print("- 输入 '退出' 或 'q' 退出程序")
            print("- 输入 '状态' 查看系统状态")
            print("- 输入 '清空' 清空对话历史")
            print()

            # 进入交互模式
            await deepseek_interactive_chat(assistant)
        else:
            print("助手初始化失败")

    except KeyboardInterrupt:
        print("\n程序被用户中断")
    except Exception as e:
        print(f"启动失败: {e}")
        print("\n可能的问题：")
        print("1. DeepSeek API密钥无效")
        print("2. 网络连接问题")
        print("3. 依赖包未正确安装")
        input("\n按回车键退出...")

async def deepseek_interactive_chat(assistant):
    """DeepSeek交互聊天"""
    print("开始对话吧！DeepSeek助手随时为您服务")
    print("-" * 50)

    while True:
        try:
            user_input = input("\n您的问题: ").strip()

            if not user_input:
                continue

            # 检查特殊命令
            if user_input.lower() in ['退出', 'exit', 'q', 'quit']:
                print("感谢使用DeepSeek智能助手，再见！")
                break

            if user_input.lower() in ['帮助', 'help']:
                print_deepseek_help()
                continue

            if user_input.lower() in ['状态', 'status']:
                try:
                    assistant.show_system_status()
                except:
                    print("状态信息暂时不可用")
                continue

            if user_input.lower() in ['清空', 'clear']:
                assistant.conversation_history.clear()
                try:
                    assistant.agent_orchestrator.clear_history()
                except:
                    pass
                print("对话历史已清空")
                continue

            if user_input.lower() in ['测试', 'test']:
                print("正在测试DeepSeek连接...")
                await test_deepseek_connection()
                continue

            # 处理查询
            print("DeepSeek正在思考...")
            result = await assistant.process_query(user_input)

            # 显示结果
            print(f"\nDeepSeek回答:")
            print(f"{result.content}")

            # 显示置信度和元数据
            confidence_text = "高" if result.confidence >= 0.8 else "中" if result.confidence >= 0.5 else "低"
            print(f"\n置信度: {confidence_text} ({result.confidence:.1f}/1.0)")

            # 显示额外信息
            if result.metadata:
                if result.metadata.get("tool_usage"):
                    print(f"使用工具数量: {result.metadata['tool_usage']}")
                if result.metadata.get("error"):
                    print(f"处理警告: {result.metadata['error']}")

            print("\n" + "-" * 50)

        except KeyboardInterrupt:
            print("\n程序被用户中断")
            break
        except Exception as e:
            print(f"处理出错: {e}")
            print("请重新输入或尝试其他问题")

def print_deepseek_help():
    """打印DeepSeek帮助信息"""
    help_text = """
DeepSeek智能助手使用指南

基本命令：
- 输入任何问题开始对话
- '帮助' - 显示此帮助信息
- '状态' - 查看系统状态
- '清空' - 清空对话历史
- '测试' - 测试DeepSeek连接
- '退出' 或 'q' - 退出程序

查询示例：
- "分析一下最近的AI发展趋势"
- "云顶之弈当前版本最强阵容推荐"
- "帮我比较DeepSeek和GPT的区别"
- "最新的科技新闻有哪些？"

DeepSeek优势：
- 高性价比的AI服务
- 优秀的中文理解能力
- 快速的响应速度
- 支持复杂推理任务

注意事项：
- 需要有效的DeepSeek API密钥
- 确保网络连接正常
- API调用会产生费用
    """
    print(help_text)

if __name__ == "__main__":
    try:
        asyncio.run(start_deepseek_assistant())
    except KeyboardInterrupt:
        print("\n程序结束")
    except Exception as e:
        print(f"程序异常: {e}")
        input("\n按回车键退出...")